package com.wfy.orchestra.dispatch

import java.util.concurrent.atomic.AtomicInteger

/**
 * @author : wangfengyuan
 * e-mail  : 446950883@qq.com
 * time    : 2025/3/20
 * desc    :
 * version : 1.0
 */
class TaskNode(task: ITask) {
    val task: ITask

    //邻接表 记录所有后继任务 时间复杂度为O(1)
    //当某个任务（例如任务A）执行完毕后，需要知道哪些任务依赖于它（例如任务B、任务C），从而触发这些后续任务的执行。这个列表 successors 就是用来保存这些后续任务引用的
    private val successors: MutableList<String> = ArrayList()

    //原子计数器记录当前未完成的依赖任务数
    private val inDegree = AtomicInteger(0)

    init {
        this.task = task
    }

    fun addSuccessor(node: String) {
        successors.add(node)
    }

    fun getInDegree(): Int {
        return inDegree.get()
    }

    fun incrementInDegree() {
        inDegree.incrementAndGet()
    }

    fun decrementInDegree(): Int {
        return inDegree.decrementAndGet()
    }

    fun getSuccessors(): List<String> {
        return successors
    }

    fun getPriority(): Int {
        return task.priority
    }

    override fun toString(): String {
        return "TaskNode(task=${task.id}, successors=$successors)"
    }
}